package hashdemo;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Random;
import java.util.Set;

/**
 * @Author 比特就业课
 * @Date 2022-11-17
 */
public class Exe_01 {
    public static void main(String[] args) {
        // 生成10万个元素的数组
        int capacity = 10_000;
        int[] array = new int[capacity];
        // 随机生成
        Random random = new Random();
        for (int i = 0; i < capacity; i++) {
            int value = random.nextInt(capacity);
            array[i] = value;

        }
       func2(array);
        fun2p(array);
        func3(array);
    }

    // 去除10万个数据中的重复数据
    public static void func1 (int[] array) {
        //建立set对象
        HashSet<Integer> set = new HashSet<>();
        for(int i=0;i< array.length;++i){
            set.add(array[i]);
        }

    }

    // 查找10万个数据中第一次重复的数据
    public static void func2 (int[] array) {
        //建立hashSet对象
        Set<Integer> hashSet = new HashSet<>();
        for(int i=0;i< array.length;i++){
            if(hashSet.contains(array[i])){
                System.out.println("第一个重复的元素是"+array[i]);
                return ;
            }
            else{
                hashSet.add(array[i]);
            }
        }

    }
    public static void fun2p(int[]array){
        // 在遍历的过程中判断Set中是否已经包含当前元素
        Set<Integer> set = new HashSet<>();
        for (int i = 0; i < array.length; i++) {
            if (set.contains(array[i])) {
                System.out.println("第一个重复的元素： " + array[i]);
                return;
            } else {
                set.add(array[i]);
            }
        }
    }

    // 统计10万个数据中，每个每个数据出现的次数
    public static void func3 (int[] array) {
        HashMap<Integer, Integer> hashMap = new HashMap<>();
        for (int i = 0; i < array.length ; i++) {
            if(hashMap.containsKey(array[i])){
                hashMap.put(array[i],hashMap.get(array[i]+1));
            }
            else{
                hashMap.put(array[i],1 );
            }

        }

    }
    //第二种思路：通过默认值
    public static void func3p(int[]array){
        //建立hashMap
        HashMap<Integer, Integer> hashMap = new HashMap<>();
        for (int i=0;i< array.length;++i){
            int aDefault = hashMap.getOrDefault(array[i], 0);
            hashMap.put(array[i],aDefault+1);
        }
    }
}
